﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimStatusState : StateMachineBehaviour {

    private Character animatorOwner;

    public bool activatedStatus = false;

    public Character.Status status;

    public float statusStartTime = 0.0f;
    public float statusEndTime   = 1.0f;

	 // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
	override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
        animatorOwner = animator.GetComponent<Character>();
        activatedStatus = false;
	}

	// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
	override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
        if (stateInfo.normalizedTime > statusStartTime && !activatedStatus)
        { 
            activatedStatus = true;
            animatorOwner._status |= status;
        }
        if (stateInfo.normalizedTime > statusEndTime && activatedStatus)
        {
            activatedStatus = false;
            animatorOwner._status &= ~status;
        }
	}

	// OnStateExit is called when a transition ends and the state machine finishes evaluating this state
	override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
        activatedStatus = false;
	}

	// OnStateMove is called right after Animator.OnAnimatorMove(). Code that processes and affects root motion should be implemented here
	//override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
	//
	//}

	// OnStateIK is called right after Animator.OnAnimatorIK(). Code that sets up animation IK (inverse kinematics) should be implemented here.
	//override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
	//
	//}
}
